home *** CD-ROM | disk | FTP | other *** search
- package netscape.javascript;
-
- import com.opera.EcmaScriptObject;
- import com.opera.PluginContext;
- import java.applet.Applet;
-
- public final class JSObject {
- private EcmaScriptObject ecma_object;
- private Object result;
- private Object result_mutex = new Object();
-
- private JSObject(int var1, int var2) {
- this.ecma_object = EcmaScriptObject.getObject(var1, var2);
- if (this.ecma_object != null) {
- this.ecma_object.ref();
- }
-
- }
-
- public Object call(String var1, Object[] var2) throws JSException {
- try {
- JSObject var3 = (JSObject)this.getMember(var1);
- synchronized(this.result_mutex) {
- Object var10000;
- synchronized(this) {
- if (var3 == null) {
- throw new JSException("Method " + var1 + " not found.");
- }
-
- if (this.startCall(var3, var2)) {
- this.wait();
- if (this.result instanceof JSException) {
- throw (JSException)this.result;
- }
- } else {
- this.result = null;
- }
-
- var10000 = this.result;
- }
-
- return var10000;
- }
- } catch (InterruptedException var10) {
- return null;
- }
- }
-
- private native boolean startCall(JSObject var1, Object[] var2);
-
- public boolean equals(Object var1) {
- return var1 instanceof JSObject && ((JSObject)var1).ecma_object.equals(this.ecma_object);
- }
-
- public Object eval(String var1) throws JSException {
- try {
- synchronized(this.result_mutex) {
- Object var10000;
- synchronized(this) {
- if (this.startEval(var1)) {
- this.wait();
- if (this.result instanceof JSException) {
- throw (JSException)this.result;
- }
- } else {
- this.result = null;
- }
-
- var10000 = this.result;
- }
-
- return var10000;
- }
- } catch (InterruptedException var8) {
- return null;
- }
- }
-
- private native boolean startEval(String var1);
-
- public static JSObject getWindow(Applet var0) throws JSException {
- if (var0.getParameter("mayscript") == null) {
- throw new JSException("Applet not allowed to access javascript.");
- } else {
- PluginContext var1 = (PluginContext)var0.getAppletContext();
- if (var1 != null) {
- int var2 = var1.getJSWindow();
- int var3 = var1.getESRuntime();
- if (var2 != 0 && var3 != 0) {
- return new JSObject(var2, var3);
- }
- }
-
- return null;
- }
- }
-
- private String escapeSingleQuotes(String var1) {
- int var2 = var1.indexOf(39);
- if (var2 == -1) {
- return var1;
- } else {
- String var3 = var1.substring(0, var2) + "\\'";
-
- int var4;
- for(var4 = var2 + 1; (var2 = var1.indexOf(39, var4)) != -1; var4 = var2 + 1) {
- var3 = var3 + var1.substring(var4, var2) + "\\'";
- }
-
- var3 = var3 + var1.substring(var4);
- return var3;
- }
- }
-
- public Object getMember(String var1) {
- try {
- var1 = this.escapeSingleQuotes(var1);
- return this.eval("this['" + var1 + "'];");
- } catch (Exception var3) {
- return null;
- }
- }
-
- private native boolean getMemberN(String var1);
-
- public void setMember(String var1, Object var2) {
- try {
- JSObject var3 = (JSObject)this.eval("return function(member, val) { this[member.valueOf()] = val ? val.valueOf() : null; };");
- synchronized(this.result_mutex) {
- synchronized(this) {
- if (var3 != null && var1 != null) {
- Object[] var6 = new Object[]{var1, var2};
- if (this.startCall(var3, var6)) {
- this.wait();
- }
- }
- }
- }
- } catch (Exception var11) {
- }
-
- }
-
- private native boolean setMemberN(String var1, Object var2);
-
- public void removeMember(String var1) {
- try {
- synchronized(this.result_mutex) {
- synchronized(this) {
- if (this.removeMemberN(var1)) {
- this.wait();
- }
- }
- }
- } catch (InterruptedException var8) {
- }
-
- }
-
- private native boolean removeMemberN(String var1);
-
- public Object getSlot(int var1) {
- try {
- return this.eval("this[" + var1 + "];");
- } catch (Exception var3) {
- return null;
- }
- }
-
- private native boolean getSlotN(int var1);
-
- public void setSlot(int var1, Object var2) {
- try {
- JSObject var3 = (JSObject)this.eval("return function(member, val) { this[member.valueOf()] = val ? val.valueOf() : null; };");
- synchronized(this.result_mutex) {
- synchronized(this) {
- if (var3 != null) {
- Object[] var6 = new Object[]{new Integer(var1), var2};
- if (this.startCall(var3, var6)) {
- this.wait();
- }
- }
- }
- }
- } catch (Exception var11) {
- }
-
- }
-
- private native boolean setSlotN(int var1, Object var2);
-
- public String toString() {
- try {
- Object var1 = this.eval("this.toString()");
- return var1 != null && var1 instanceof String ? (String)var1 : null;
- } catch (JSException var2) {
- return null;
- }
- }
-
- protected void finalize() {
- try {
- if (this.ecma_object != null) {
- this.ecma_object.unref();
- }
-
- super.finalize();
- } catch (Throwable var2) {
- }
-
- }
-
- private void setResult(Object var1) {
- synchronized(this) {
- this.result = var1;
- this.notify();
- }
- }
-
- private void setExceptionResult() {
- this.result = new JSException("JavaScript exception");
- }
-
- private int getESObjectPtr() {
- return this.ecma_object != null ? this.ecma_object.getESObjectPtr() : 0;
- }
-
- private int getESRuntimePtr() {
- return this.ecma_object != null ? this.ecma_object.getESRuntimePtr() : 0;
- }
- }
-